package com.keqiang.chart.impl.axis.impl.line

import android.graphics.Color
import android.graphics.PathEffect
import android.graphics.RectF
import android.view.Gravity
import androidx.annotation.ColorInt
import androidx.annotation.FloatRange
import androidx.annotation.Px
import com.keqiang.chart.impl.axis.Axis
import com.keqiang.chart.utils.px

/**
 * 在折线图中显示在y轴上标记特定值的附加线
 */
open class AddedLine(var value: Float) {
    /**
     * 附加线颜色
     */
    @setparam:ColorInt
    var lineColor: Int = Color.GREEN

    /**
     * 附加线宽度
     */
    @setparam:Px
    @setparam:FloatRange(from = 1.0)
    var lineWidth: Float = 1f.px
        set(value) {
            if (value <= 1) {
                return
            }
            field = value
        }

    /**
     * 附加线文本
     */
    var label: String? = null

    /**
     * 附加线文本字体大小
     */
    @setparam:Px
    var labelTextSize = 24f.px

    /**
     * 附加线文本字体颜色
     */
    @setparam:ColorInt
    var labelTextColor: Int = Color.BLACK

    /**
     * 附加线文本绘制位置，以附加线作为基准.垂直方向只能基于附加线之上和之下，
     * 如果设置为[Gravity.CENTER_VERTICAL],则当做[Gravity.TOP]处理
     */
    var labelGravity: Int = Gravity.TOP or Gravity.RIGHT

    /**
     * 标签X轴偏移值,>0:向右偏移，<0:向左偏移
     */
    @setparam:Px
    var labelXOffset: Float = 0f

    /**
     * 标签Y轴偏移值，以附加线作为基准点，>0:远离基准线，<0:靠近基准线
     */
    @setparam:Px
    var labelYOffset: Float = 0f

    /**
     * [Axis.endPadding]属性是否作用于附加线，如果此值为true,那么附加线绘制长度<=x轴轴线长度
     */
    var useEndPadding: Boolean = true

    /**
     * [Axis.startPadding]属性是否作用于附加线，如果此值为true,那么附加线绘制长度<=x轴轴线长度
     */
    var useStartPadding: Boolean = true

    /**
     * 线条路径样式
     */
    var pathEffect: PathEffect? = null

    /**
     * 附加线线绘制的矩形区域
     *
     * 此对象在绘制时主动赋值，非自定义绘制不要设置此值
     */
    var drawRectF: RectF = RectF()
}